function crc16(buffer) {
    var crc = 0xFFFF;
    for (var i = 0; i < buffer.length; i++) {
        crc = crc ^ buffer[i].charCodeAt();
        for (var j = 0; j < 8; j++) {
            if ((crc & 0x0001) != 0) {
                crc = crc >> 1;
                crc = crc ^ 0xA001;
            } else {
                crc = crc >> 1;
            }
        }
    }
    return formatZero(crc.toString(16).toUpperCase(),4);
};

function judgeData(data) {
    console.log(data)
    var crc = data.substr(-4);
    var d = data.substring(0, data.length - 4);
    if (crc16(d) != crc) {
        return 0;
    }
    return d.substr(-2);

};

function parseOpenData(imei,flag){
    if(flag == 0){
        var new_imei = 'code61tk'+ crc16(imei) 
    }else{
        var new_imei = 'code60tk'+ crc16(imei) 
    }

    return  new_imei + crc16(new_imei)
};

function formatZero(num, len) {
    if(String(num).length > len) return num;
    return (Array(len).join(0) + num).slice(-len);
}


module.exports = {
    crc16,
    judgeData,
    parseOpenData,
}